package com.hfut.jpoa.dao.impl;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;

import com.hfut.jpoa.common.dto.ResultDto;
import com.hfut.jpoa.common.exception.DaoException;
import com.hfut.jpoa.dao.DispatchDAO;
import com.hfut.jpoa.dto.DispatchDTO;
import com.hfut.jpoa.model.Dispatch;
import com.hfut.jpoa.model.User;
import com.ibatis.sqlmap.client.SqlMapClient;

public class DispatchDAOImpl implements DispatchDAO
{
	private SqlMapClient sqlMapClient;
	private static final Logger LOGGER = LoggerFactory
	        .getLogger(DispatchDAOImpl.class);

	public int deleteByPrimaryKey(Integer projectId) throws DaoException
	{
		Dispatch key = new Dispatch();
		key.setProjectId(projectId);
		int rows = 0;
		try
		{
			rows = sqlMapClient.delete(
			        "tb_jpoa_dispatch.ibatorgenerated_deleteByPrimaryKey", key);
		} catch (SQLException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return rows;
	}

	public int updateByPrimaryKey(Dispatch record) throws DaoException
	{
		int rows = 0;
		try
		{
			rows = sqlMapClient.update(
			        "tb_jpoa_dispatch.ibatorgenerated_updateByPrimaryKey",
			        record);
		} catch (SQLException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return rows;
	}

	public SqlMapClient getSqlMapClient()
	{
		return sqlMapClient;
	}

	public void setSqlMapClient(SqlMapClient sqlMapClient)
	{
		this.sqlMapClient = sqlMapClient;
	}

	public ResultDto<Dispatch> findInfoForPage(DispatchDTO condition)
	        throws DaoException
	{
		ResultDto<Dispatch> result = new ResultDto<Dispatch>();
		try
		{
			List<Dispatch> configsList = sqlMapClient.queryForList(
			        "tb_jpoa_dispatch.find_for_page", condition);
			result.setResult(configsList != null ? configsList
			        : new ArrayList<Dispatch>());
			BeanUtils.copyProperties(condition.getPagination(),
			        result.getPagination());
			result.getPagination().setTotal(
			        (Integer) sqlMapClient.queryForObject(
			                "tb_jpoa_dispatch.find_for_page_count", condition));
		} catch (SQLException e)
		{
			LOGGER.error("findInfoForPage exception", e);
			throw new DaoException("findInfoForPage exception", e);
		}
		return result;
	}

	public void insert(Dispatch dispatch) throws DaoException
	{

		try
		{
			sqlMapClient.insert(
			        "tb_jpoa_dispatch.ibatorgenerated_insertSelective",
			        dispatch);
		} catch (SQLException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public Dispatch findInfoForPage(Dispatch condition) throws DaoException
	{
		Dispatch dispatch = new Dispatch();
		try
		{
			dispatch = (Dispatch) sqlMapClient.queryForObject(
			        "tb_jpoa_dispatch.findInfoForPage", condition);
		} catch (SQLException e)
		{
			LOGGER.error("findInfoForPage exception", e);
			throw new DaoException("findInfoForPage exception", e);
		}
		return dispatch;
	}
}